package com.zisu.a996.stream;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/26 10:33
 * @Version 1.0
 */

import org.junit.Test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * 流的4种构件形式
 **/
public class StreamConstructor {

    /**
     * 由数值直接构件流
     **/
    @Test
    public void streamFromValue(){
        Stream stream = Stream.of(1,2,3,4,5);
        stream.forEach(System.out::println);
    }

    /**
     * 由数组构件流
     **/
    @Test
    public void streamFromArray(){
        int[] numbers = {1,2,3,4,5};
        IntStream intStream = Arrays.stream(numbers);
        intStream.forEach(System.out::println);
    }

    /**
     * 由文件构件流
     **/
    @Test
    public void streamFromFile() throws IOException {
        //这里的流就是指的是一个一个字符
        Stream<String> lines = Files.lines(Paths.get("E:\\work\\学习demo\\a996\\src\\main\\java\\com\\zisu\\a996\\stream\\StreamConstructor.java"));
        lines.forEach(System.out::println);
    }

    /**
     * 由 Function 构件流
     **/
    @Test
    public void streamFromFunction() throws IOException {
        //迭代器，后一个流会基于上一个流。。 原来的值上 加上2 生产新的流。
        /*Stream<Integer> stream = Stream.iterate(0, n -> n * 2);*/

        //generator 生成器，是不基于上一个流的。
        Stream<Double> stream = Stream.generate(Math::random);

        stream.limit(20).forEach(System.out::println);
    }

}
